﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Net.Sockets;

namespace Sofire.DataComm.Net.Async
{
    /// <summary>
    /// 表示一个派生于 <see cref="System.Net.Sockets.SocketAsyncEventArgs"/> 的异步套接字操作。
    /// </summary>
    public interface IRemoteClientEventArgs
    {
        /// <summary>
        /// 获取一个值，表示当前远程端是否已被标志断开的标志。如果 true，则表示远程端正常，否则表示已被标志断开标志。
        /// </summary>
        bool IsConnected { get; }

        /// <summary>
        /// 获取客户端的信息。
        /// </summary>
        IRemote ClientInfo { get; }

        /// <summary>
        /// 获取或设置要使用的套接字或创建用于接受与异步套接字方法的连接的套接字。
        /// </summary>
        Socket AcceptSocket { get; }

        /// <summary>
        /// 获取或设置与此异步套接字操作关联的用户或应用程序对象。
        /// </summary>
        object UserToken { get; set; }

        ///// <summary>
        ///// 获取要用于异步套接字方法的数据缓冲区。
        ///// </summary>
        //byte[] Buffer { get; }
        ///// <summary>
        ///// 获取 <see cref="System.Net.Sockets.SocketAsyncEventArgs.Buffer"/> 属性引用的数据缓冲区的偏移量（以字节为单位）。
        ///// </summary>
        //int Offset { get; }
        ///// <summary>
        ///// 获取可在异步操作中发送或接收的最大数据量（以字节为单位）。
        ///// </summary>
        //int Count { get; }

        ///// <summary>
        ///// 获取最近使用此上下文对象执行的套接字操作类型。
        ///// </summary>
        //SocketAsyncOperation LastOperation { get; }

        ///// <summary>
        ///// 获取或设置一个要用于异步套接字方法的数据缓冲区数组。
        ///// </summary>
        //IList<ArraySegment<byte>> BufferList { get; set; }

        ///// <summary>
        ///// 获取在套接字操作中传输的字节数。
        ///// </summary>
        //int BytesTransferred { get; }

        ///// <summary>
        ///// 设置要用于异步套接字方法的数据缓冲区。
        ///// </summary>
        ///// <param name="offset">数据缓冲区中操作开始位置处的偏移量，以字节为单位。</param>
        ///// <param name="count">可在缓冲区中发送或接收的最大数据量（以字节为单位）。</param>
        //void SetBuffer(int offset, int count);
        ///// <summary>
        ///// 设置要用于异步套接字方法的数据缓冲区。
        ///// </summary>
        ///// <param name="buffer">要用于异步套接字方法的数据缓冲区。</param>
        ///// <param name="offset">数据缓冲区中操作开始位置处的偏移量，以字节为单位。</param>
        ///// <param name="count">可在缓冲区中发送或接收的最大数据量（以字节为单位）。</param>
        //void SetBuffer(byte[] buffer, int offset, int count);
    }
}
